<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义事件</title>
</head>
<body>
<div id="app">
    <p>总数：{{total}}</p>
    <!--监听自定义事件-->
    <my-component @increase="handleGetTotal" @reduce="handleGetTotal"></my-component>
    <!--监听原生事件-->
    <my-component v-on:click.native="handleClick"></my-component>
</div>
<script src="https://unpkg.com/vue/dist/vue.min.js"></script>
<script>
    /*子组件中点击后，通过$emit()把它传递给父组件,父组件用v-on：xxx*/
    Vue.component('my-component',{
        template: '<div>\
        <button @click="handleIncrease">+1</button>\
        <button @click="handleReduce">-1</button>\
        <button @click="handleDispatch">派发事件</button>\
        </div>',
        data:function (){
            return {
                counter: 0
            }
        },
        methods: {
            handleIncrease: function (){
                this.counter++;
                this.$emit('increase',this.counter);
            },
            handleReduce: function (){
                this.counter--;
                this.$emit('reduce',this.counter);
            },
            handleDispatch:function (){
                /*Vue1.x写法，后面废弃了，见Demo4用法*/
                this.$dispatch('on-message','来自内部组件的数据');
            }
        }
    })

    var app = new Vue({
        el: '#app',
        data:{
            total: 0
        },
        methods: {
            handleGetTotal: function (total) {
                this.total = total;
            }
        },
        events:{
            'on-message': function (msg){
                this.message = msg;
                window.alert(msg);
            }
        }
    })
</script>
</body>
</html>
